<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META content="text/html; charset=ISO-8859-2" http-equiv="content-type">
<meta name="robots" content="index,follow">
<META NAME="Keywords" CONTENT="Base32hex, on-line decoder, base32hex to hex decoder, javascript">
<meta name="viewport" content="width=device-width, initial-scale=1">
<META NAME="Author" CONTENT="Tomasz Ostrowski">
<META name="description" content="On-line javascript base32hex to hexadecimal string decoder.">  
<link rel="stylesheet" type="text/css" media="only screen and (max-width: 959px)" href="./css/mobile.css" />
<link rel="stylesheet" type="text/css" media="only screen and (min-width: 960px)" href="./css/main.css" />
<script type="text/javascript" src="./js/tree.js"></script>


<script src="./js/jquery-2.1.3.min.js"></script>
<!-- <link rel="stylesheet" type="text/css" href="./css/jquery-eu-cookie-law-popup.css"/>
<script src="./js/jquery-eu-cookie-law-popup-en.js"></script> -->

<title>Base32hex decoder</title>  
</head>
<body class="eupopup eupopup-bottomleft eupopup-style-compact">

<div id="wrap">
<div id="header">
<div id="header_l">
  <a href="../index.htm">erma0.cn</a>
</div>
<div id="header_r"><A HREF="./base32hex.htm" TARGET="_self"><strong>ENGLISH VERSION</strong></A><br><A HREF="./base32hex.php?lang=pl" TARGET="_self"><strong>WERSJA POLSKA</strong></A></div>      
</div>

<a href="../bot-trap/">
  <img src="./images/pixel.gif" border="0" alt=" " width="1" height="1">
</a>
     

<script type="text/javascript">
//<!--
    var hD='0123456789ABCDEF';
    function dec2hex(d) {
        var h = hD.substr(d&15,1);
        while (d>15) {
            d>>=4;
            h=hD.substr(d&15,1)+h;
        }
        if (document.frmConvert.chbLowercaseOutput.checked) {
            h = h.toLowerCase();
        }        
        return h;
    }
                  
    var keyStr = "0123456789ABCDEFGHIJKLMNOPQRSTUV="
    function base32_decode(input) {
        var buffer = 0;
        var bitsLeft = 0;    
        var output = new Array();
        var i = 0;
        var count = 0;
        
        while (i < input.length) {
            var val = keyStr.indexOf(input.charAt(i++));
            if (val >= 0 && val < 32) {
              buffer <<= 5;
              buffer |= val;
              bitsLeft += 5;
              if (bitsLeft >= 8) {
                output[count++] = (buffer >> (bitsLeft - 8)) & 0xFF;
                bitsLeft -= 8;
              }            
            }                         
        }        
        return {output : output, bitsLeft : bitsLeft};
    }
    
   
    function ShowDecodedAsText(val)
    {
        var target = document.getElementById('divDecodedText'); 
        target.innerHTML = val;    
    }     

    function ShowWarn(val)
    {
        var target = document.getElementById('divWarn'); 
        target.innerHTML = val;    
    }    
    
    function Convert() {
        var input = document.frmConvert.encoded.value.toUpperCase();
        var cleaned = "";
        var myRegExp = /[A-V0-9]/ ;        
        for (i=0; i<input.length; i++) {
          var ch = input.charAt(i);
          if (myRegExp.test(ch) == false) {
            continue;
          }
          cleaned += ch;          
        }
        document.frmConvert.cleaned.value = cleaned;
        var result = base32_decode(cleaned);
        var output = result.output;
        var bitsLeft = result.bitsLeft;
        var separator = "";
        if (document.frmConvert.chbSeparator.checked)
            separator = " 0x";
        var hexText = "";
        //if (bitsLeft > 0) {
        // var htmlWarn = "<p" + ">" + "Warning: input data is not a multiple of 8 bits, ";
        //  htmlWarn += "last output byte was padded with " + (8-bitsLeft) + " zero bits on the right.</p" + ">";
        //  ShowWarn(htmlWarn);        
        //} else
        {
          var htmlWarn = "<p" + ">" + "</p" + ">";
          ShowWarn(htmlWarn);          
        }
        var htmlStr = "<p style=\"font-family: courier new, monospace\"><b>";
        for (i=0; i<output.length; i++) {
          hexText = hexText + separator + (output[i]<16?"0":"") + dec2hex(output[i]);
          if (output[i] >= 32 && output[i] <= 126)
          {
            switch(String.fromCharCode(output[i])) {
            case '&': htmlStr += "&amp;";
              break;
            case '<': htmlStr += "&lt;";
              break;
            case '>': htmlStr += "&gt;";
              break;
            case '"': htmlStr += "&quot;";
              break;
            case '\'': htmlStr += "&#039;";
              break;
            default: htmlStr += String.fromCharCode(output[i]);
            }          
          }
          else {
            htmlStr += "<i>[" + output[i] + "]<" + "/i>";
          }
        }
        htmlStr += "<" + "/b><" + "/p>";  // stupid W3C validator...
        document.frmConvert.hex.value = hexText;
                
        ShowDecodedAsText(htmlStr);   
    } 

//-->
</script>


<div id="main">
<h3>Base32hex -> hexadecimal string decoder</h3>
      <p>Base32hex is a base32 variant using different alphabet, that is 
      "0123456789ABCDEFGHIJKLMNOPQRSTUV".
      This allows easily sort base32hex string in a same way as binary input would be
      sorted. On the other side this alphabet contains (contrary to base32) easy to
      mix character pairs: 0 and O, 1 and L, B and 8. 
      </p>  
      <form name="frmConvert" action="">
				<p>Base32hex string:</p>
			    <p><input type="text" name="encoded" value="" style="width: 550px;"></p>
				<p>Cleaned-up string (uppercase only, fixed common mistypes like 8 - B, removed characters outside base32 set):</p>
			    <p><input type="text" name="cleaned" readonly="readonly" value="" style="width: 550px;"></p>
        <p>Options:</p>
          <p><input type="checkbox" name="chbSeparator" value="sep">0x separator for output
          <br>
          <input type="checkbox" name="chbLowercaseOutput" value="lowercaseHex">Use lowercase hex characters</p>  
        <div id="divWarn">
        <p></p>
        </div>	          
				<p>Decoded data (hexadecimal)</p>
			    <p><input type="text" name="hex" value="" style="width: 550px;"></p>
        <p>Decoded data as ASCII text, bytes outside 32...126 range displayed in italics as <i>[byte value]</i>:<br>        
        <div id="divDecodedText">
        <p><i>...decoded text...</i></p>
        </div>	 			    
			  <p>
			    <button type=button name="btnConvert"
            onclick="Convert()">
            Convert
          </button>
			  </p>
			</form>
  </div>
<div id="sidebar">
<h3>Sitemap</h3>

<ul id="tree0" class="tree">

    <li ><a>PROJECTS</a>
    <ul>
    <li><A HREF="../programator.htm" TARGET="_self">FLASH 49F programmer</A></li> 
    </ul>
    </li>

 
    <li><a>ONLINE TOOLS</a>
    <ul>
    <li><a href="./base64.htm" TARGET="_self">Base64 -&gt; HEX</A></li>
    <li><a href="./base32.htm" TARGET="_self">Base32 -&gt; HEX</a></li>
    <li><a href="./base32hex.htm" TARGET="_self">Base32hex -&gt; HEX</a></li>
    <li><a href="./ascii.htm" TARGET="_self">ASCII -&gt; HEX</a></li>
    <li><a href="./ascii_uN.htm" TARGET="_self">ASCII -&gt; u16/u32/u64 HEX</a></li>            
    <li><a href="./hex_to_base64.htm" TARGET="_self">HEX -&gt; Base64</a></li>
    <li><a href="./text_to_base64.htm" TARGET="_self">Text -&gt; Base64</a></li>
    <li><a href="./hex_to_base32.htm" TARGET="_self">HEX -&gt; Base32</a></li>
    <li><a href="./hex_to_base32hex.htm" TARGET="_self">HEX -&gt; Base32hex</a></li>
    <li><a href="./hex_to_ascii.htm" TARGET="_self">HEX -&gt; ASCII</a></li>
    <li><a href="./hex_to_dec.htm" TARGET="_self">HEX -&gt; DEC</a></li>	
    <li><a href="./dec_to_ascii.htm" TARGET="_self">DEC -&gt; ASCII</a></li>
    <li><a href="./bin_to_32bit_hex.htm" TARGET="_self">BIN &lt;-&gt; 32-bit hex</a></li>    
    <li><a href="./md5.htm" TARGET="_self">MD5 calculator</a></li>
    <li><a href="./sha1.htm" TARGET="_self">SHA1 calculator</a></li>    
    <li><a href="./regexp.htm" TARGET="_self">Regular exp.</a></li>
    <li><a href="./cpp_text_escape.htm" TARGET="_self">Text -&gt; Cpp</a></li>
    <li><a href="./cpp_unescape.htm" TARGET="_self">Cpp -&gt; text</a></li>
    <li><a href="./pascal_escape.htm" TARGET="_self">Text -&gt; Pascal</a></li>        
    <li><a href="./hex_to_file.htm" TARGET="_self">HEX -&gt; file</a></li>
    <li><a href="./file_to_hex.htm" TARGET="_self">File -&gt; HEX</a></li>
    <li><a href="./file_to_base64.htm" TARGET="_self">File -&gt; Base64</a></li>    
    <li><a href="./html_list_gen.htm" TARGET="_self">Text -&gt; HTML ul</a></li>
    <li><a href="./crc8.htm" TARGET="_self">CRC8</a></li>
    <li><a href="./wave_gen.htm" TARGET="_self">WAVE generator</a></li>
    <li><a href="./bin_decoder.htm" TARGET="_self">Bin decoder</a></li>
    <li><a href="./rc4.htm" TARGET="_self">RC4</a></li>          
    <li><a href="./xor.htm" TARGET="_self">XOR</a></li>
    <li><a href="./inv.htm" TARGET="_self">Inverting bits</a></li>
    <li><a href="./par_resistors.htm" TARGET="_self">Par. resistors search</a></li>
    <li><a href="./unique_str.htm" TARGET="_self">Deduplicate / sort</a></li>        
    <li><a href="./base64_to_PEM.htm" TARGET="_self">Base64 -&gt; PEM</a></li>
    <li><a href="./PEM_to_base64.htm" TARGET="_self">PEM -&gt; base64</a></li>
    <li><a href="./diskstats.htm" TARGET="_self">/proc/diskstats</a></li>    
    </ul>
    </li> 


    <li><A HREF="../contact2.htm" TARGET="_self">Contact</A></li></ul>
<script type="text/javascript">
//<!--
new tree("tree0");
//-->
</script>

<br>  
<br>  
<br>  





  <br>    

        
    
</div>


<div id="footer">




  
</div>


<br>
<div id="footer2"><p>      
      <!-- <font size="-2">&nbsp;"Cookie monsters": 5583818&nbsp;&nbsp;&nbsp;&nbsp;Parse time:&nbsp;0.000 s</font> -->
  </p>
	</div>
</div>
</body>
</html>

